home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programmer's Power Pack / Delphi Volume 1.iso / e_to_l / isamexpt / isamtabl.pas < prev    next >
Pascal/Delphi Source File  |  1996-09-15  |  63KB  |  2,056 lines

  1. unit Isamtabl;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, DsgnIntf,
  8.   UUseIsam, Filer, LowBrows,
  9.   Restruct, ReIndex, ExtCtrls;
  10.  
  11. type
  12.   TIsamProperty = class(TStringProperty)
  13.   public
  14.     function GetAttributes: TPropertyAttributes; override;
  15.     procedure GetValueList(List: TStrings); virtual; abstract;
  16.     procedure GetValues(Proc: TGetStrProc); override;
  17.   end;
  18.  
  19.   TIsamBrowserProperty = class(TIsamProperty)
  20.     procedure GetValueList(List: TStrings); override;
  21.   end;
  22.  
  23.   TIsamHeaderProperty = class(TIsamProperty)
  24.     procedure GetValueList(List: TStrings); override;
  25.   end;
  26.  
  27.   TIsamTable = class(TComponent)
  28.   private
  29.     FActive      : Boolean;
  30.     FAnsiConvert : Boolean;
  31.     FTableName   : TFileName;
  32.     FUnitName    : TFileName;
  33.     FIsamKey     : TStringList;
  34.     FRecordName  : String;
  35.     FRecord      : TStringList;
  36.     FIID         : TStringList;
  37.     FNetz        : NetSupportType;
  38.     FSaveModus   : Boolean;
  39.     FSourceCreate: Boolean;
  40.     FBrowserName : String;
  41.     FHeaderName  : String;
  42.     Procedure MySave;
  43.     Function Check(Name : String; SS : TStringList) : Boolean;
  44.     procedure CheckInactive;
  45.     function GetActive: Boolean;
  46.     procedure SetActive(Value: Boolean);
  47.     procedure SetTableName(const Value: TFileName);
  48.  
  49.     procedure SetRecordName(const Value: String);
  50.     Procedure SetUnitName(const Value: TFileName);
  51.     {$IFDEF CodeGen}
  52.     Procedure Uses_Einfuegen(var SourceStrings: TStringList);
  53.     Procedure Record_Einfuegen(var SourceStrings: TStringList);
  54.     Procedure Data_Einfuegen(var SourceStrings: TStringList);
  55.     Procedure Key_Deklaration_Einfuegen(var SourceStrings: TStringList);
  56.     Procedure Key_Proc_Einfuegen(var SourceStrings: TStringList);
  57.     Procedure FormCreate_Einfuegen(var SourceStrings: TStringList);
  58.     Procedure FormCreate_Fuellen(var SourceStrings: TStringList);
  59.     Procedure FormResize_Fuellen(var SourceStrings: TStringList);
  60.     Procedure FormShow_Fuellen(var SourceStrings: TStringList);
  61.     Procedure HeaderCreate_Einfuegen(var SourceStrings: TStringList);
  62.     Procedure Browser_BuildRow_Einfuegen(var SourceStrings: TStringList);
  63.     Procedure Browser_Edit_Einfuegen(var SourceStrings: TStringList);
  64.     Procedure Klammern_Loeschen(var SourceStrings: TStringList);
  65.     {$ENDIF}
  66.     Procedure SetHeaderName(const Value: String);
  67.     Procedure SetBrowserName(const Value: String);
  68.     {$IFDEF CodeGen}
  69.     Procedure SetSourceCreate(const Value: Boolean);
  70.     {$ENDIF}
  71.     Function  GetFormName(SList: TStringList): String;
  72.  
  73.   protected
  74.     Procedure SetRecord(Value: TStringList);
  75.     Procedure SetKeyProc(Value: TStringList);
  76.     Procedure SetIIDProc(Value: TStringList);
  77.     Procedure SetNetz(Value: NetSupportType);
  78.     {$IFDEF CodeGen}
  79.     Procedure BrowRow(Var SListe: TStringList;Var II : Integer);
  80.     Procedure GetFeldProc_Einfuegen(var SourceStrings : TStringList);
  81.     {$ENDIF}
  82.     Procedure SetAnsiConvert(Const Value: Boolean);
  83.   public
  84.     IFBPtr    : IsamFileBlockPtr;
  85.     Key_Proc  : KeyProc;
  86.     RecSize   : Longint;
  87.     KeyNo     : Integer;
  88.     Ref       : Longint;
  89.     Key       : IsamKeyStr;
  90.     MaxKeys   : Byte;
  91.     IID       : IsamIndDescr;
  92.     EditFormIdent: String;
  93.     constructor Create(AOwner: TComponent); override;
  94.     destructor Destroy; override;
  95.     Procedure Open;
  96.     Procedure Close;
  97.     Procedure ClearFields(var DATA,DUP);
  98.     Procedure Delete(var DATA,DUP);
  99.     Procedure Insert(var DATA,DUP);
  100.     Procedure Append(var DATA,DUP);
  101.     Procedure UpdateRecord(var DATA, DUP);
  102.     Procedure Get(var DATA, DUP);
  103.     Procedure Next(var DATA,DUP);
  104.     Function  FindKey(Var Data,Dup;var Key1 : IsamKeyStr) : Boolean;
  105.     Function  FindNearest(Var Data,Dup; Key1 : IsamKeyStr) : Boolean;
  106.     Procedure Prior(var DATA,DUP);
  107.     Procedure First(var DATA,DUP);
  108.     Procedure Last(var DATA,DUP);
  109.     Procedure CreateTable;
  110.     Function Rebuild: LongInt;
  111.     Function RecordCount: Longint;
  112.   published
  113.     property Active: Boolean read GetActive write SetActive default False;
  114.     Property AnsiConvert: Boolean read FAnsiConvert write SetAnsiConvert default True;
  115.     Property BrowserName: String read FBrowserName write SetBrowserName;
  116.     Property HeaderName: String read FHeaderName write SetHeaderName;
  117.     Property MyUnitName : TFileName read FUnitName write SetUnitName;
  118.     property TableName: TFileName read FTableName write SetTableName;
  119.     property RecordName: String read FRecordName write SetRecordName;
  120.     property IsamKeyProc: TStringList read FIsamKey write SetKeyProc;
  121.     property IsamRecord: TStringList read FRecord write SetRecord;
  122.     property Netz: NetSupportType read FNetz write SetNetz default NoNet;
  123.     property SaveModus: Boolean read FSaveModus write FSaveModus default False;
  124.     {$IFDEF CodeGen}
  125.     property SourceCreate: Boolean read FSourceCreate write SetSourceCreate default False;
  126.     {property SourceEditorCreate: Boolean read FEditorCreate write SetEditorCreate default False;}
  127.     {$ENDIF}
  128.     property AnzahlKeys: Byte read MaxKeys write MaxKeys default 1;
  129.     property IIDProc : TStringList read FIID write SetIIDProc;
  130.   end;
  131.  
  132.   var NetType: NetSupportType;
  133.  
  134. implementation
  135.  
  136. Uses UToolDll, ExptIntf,
  137.      FvcBrows, IsamBrow, Proxies, Dat;
  138.  
  139. var FHandle: Longint;
  140.     MyNet  : NetSupportType;
  141.  
  142. function TIsamProperty.GetAttributes: TPropertyAttributes;
  143. begin
  144.   Result := [paValueList, paSortList, paMultiSelect, paReadOnly];
  145. end;
  146.  
  147. procedure TIsamProperty.GetValues(Proc: TGetStrProc);
  148. var
  149.   I: Integer;
  150.   Values: TStringList;
  151. begin
  152.   Values := TStringList.Create;
  153.   try
  154.     GetValueList(Values);
  155.     for I := 0 to Values.Count - 1 do Proc(Values[I]);
  156.   finally
  157.     Values.Free;
  158.   end;
  159. end;
  160.  
  161. procedure TIsamBrowserProperty.GetValueList(List: TStrings);
  162. var I: Integer;
  163.     Component: TComponent;
  164. begin
  165.   i:= 0;
  166.   While I < Designer.Form.ComponentCount do begin
  167.     Component := Designer.Form.Components[I];
  168.     if (Component is TIsamBrowser)
  169.     and (Component.Name <> '') then List.Add(Component.Name);
  170.     Inc(i);
  171.   end;
  172. end;
  173.  
  174. procedure TIsamHeaderProperty.GetValueList(List: TStrings);
  175. var I: Integer;
  176.     Component: TComponent;
  177. begin
  178.   i:= 0;
  179.   While I < Designer.Form.ComponentCount do begin
  180.     Component := Designer.Form.Components[I];
  181.     if (Component is THeader) and (Component.Name <> '') then List.Add(Component.Name);
  182.     Inc(i);
  183.   end;
  184. end;
  185.  
  186. constructor TIsamTable.Create(AOwner: TComponent);
  187. begin
  188.   inherited Create(AOwner);
  189.   FAnsiConvert:= True;
  190.   IFBPTR:= NIL;
  191.   RecSize:= 0;
  192.   KeyNo:= 1;
  193.   Ref:= 0;
  194.   Key_Proc:= NIL;
  195.   FTableName:= '';
  196.   FRecordName:= '';
  197.   MaxKeys := 1;
  198.   FIsamKey:= TStringList.Create;
  199.   FRecord:= Tstringlist.create;
  200.   FIID := TStringList.Create;
  201. {$Ifdef Test}
  202.   FIsamKey.Add('Function '+FRecordName+'KeyProc(Var Daten; KeyNr:Word): IsamKeyStr;');
  203.   FIsamKey.Add('var s : String;');
  204.   FIsamKey.Add('begin');
  205.   FIsamKey.Add('  s:= '+Chr(39)+Chr(39)+';');
  206.   FIsamKey.Add('  with '+FRecordName+'(Daten) do begin');
  207.   FIsamKey.Add('    case KeyNr of');
  208.   FIsamKey.Add('      1 : S:= '+Chr(39)+Chr(39)+';');
  209.   FIsamKey.Add('    End;');
  210.   FIsamkey.Add('  end;');
  211.   FIsamKey.Add('  KeyProc:= s;');
  212.   FIsamkey.Add('end;');
  213.   FIsamkey.Add('');
  214.  
  215.   FRecord.Add('Type');
  216.   FRecord.Add(FRecordName+' = Record');
  217.   FRecord.add('  Dummy : Longint;');
  218.   FRecord.add('end;');
  219. {$Endif}
  220.   if (csDesigning in ComponentState) then
  221.   if Toolservices <> NIL then
  222.   begin
  223.     FIsamKey.Add('Function '+FRecordName+'KeyProc(Var Daten; KeyNr:Word): IsamKeyStr;');
  224.     FIsamKey.Add('var s : String;');
  225.     FIsamKey.Add('begin');
  226.     FIsamKey.Add('  s:= '+Chr(39)+Chr(39)+';');
  227.     FIsamKey.Add('  with '+FRecordName+'(Daten) do begin');
  228.     FIsamKey.Add('    case KeyNr of');
  229.     FIsamKey.Add('      1 : S:= '+Chr(39)+Chr(39)+';');
  230.     FIsamKey.Add('    End;');
  231.     FIsamkey.Add('  end;');
  232.     FIsamKey.Add('  KeyProc:= s;');
  233.     FIsamkey.Add('end;');
  234.     FIsamkey.Add('');
  235.  
  236.     FRecord.Add('Type');
  237.     FRecord.Add(FRecordName+' = Record